/***
 *
 * Especificaco lexica para a linguagem OCL 
 * Escopo : invariantes,
 *			 pre e pos condicoes (verificacao)
 *
 ***/

import java_cup.runtime.*;

%%

%class Lexer
%unicode
%cup
%line
%column

%{
  private Symbol symbol(int type) {
    return new Symbol(type, yyline, yycolumn);
  }
  private Symbol symbol(int type, Object value) {
    return new Symbol(type, yyline, yycolumn, value);
  }
%}

FimDeLinha = \r|\n|\r\n
EspacoBranco = {FimDeLinha} | [ \t\f]

/* literais */
IntegerLiteral = 0 | [1-9][0-9]*

/* identificadores */


/* comentarios */




%%

/* espaco em branco */
{EspacoBranco}		{ /* ignorar */ }

/* comentario */
{Comentario}           { /* ignorar */ }

/* palavras-chave */


/* literais booleanos */
"true"              { return symbol(sym.BOOLEAN_LITERAL, new Boolean(true));     }
"false"             { return symbol(sym.BOOLEAN_LITERAL, new Boolean(false));    }

/* literais inteiros */


/* identificadores */ 
  

/* operadores */

/* separadores */


/* caso nao seja nenhum caractere acima, assinale um erro */
.|\n                { throw new Error("Caracter ilegal na entrada <"+ yytext()+ ">"); }
